#include "pool_head.h"

void *thread_handler(void *args){
    //强转类型
    thread_t *status = (thread_t*)args;

    while(1){
        pthread_mutex_lock(&status->lock); //加锁
        while(status->que.size == 0 && status->exit_flag == 0){
            //说明任务队列无任务并且退出标记位为0
            pthread_cond_wait(&status->cond,&status->lock);
        }

        if(status->exit_flag == 1){
            //说明主线程要求子线程退出
            pthread_mutex_unlock(&status->lock);
            printf("子线程退出...\n");
            pthread_exit(0);
        }

        //到这里说明了任务队列有任务
        int client_fd = status->que.head->client_fd;
        dequeue(&status->que); //出队一个元素
        pthread_mutex_unlock(&status->lock); //释放锁

        //先读socket
        data_s cur_msg;
        memset(&cur_msg,0,sizeof(cur_msg));
        //读取传输方式长度
        recv(client_fd,&cur_msg.len,sizeof(int),MSG_WAITALL);
        printf("cur_msg len : %d\n",cur_msg.len);
        //读取传输方式
        recv(client_fd,cur_msg.buf,cur_msg.len,MSG_WAITALL);
        printf("cur_msg : %s\n",cur_msg.buf);

        data_s file_msg;
        memset(&file_msg,0,sizeof(file_msg));
        //读取文件名长度
        recv(client_fd,&file_msg.len,sizeof(int),MSG_WAITALL);
        printf("file_name len : %d\n",file_msg.len);
        //读取文件名
        recv(client_fd,file_msg.buf,file_msg.len,MSG_WAITALL);
        printf("file_name : %s\n",file_msg.buf);

        if(strcmp(cur_msg.buf,"download") == 0){
            //说明是下载，那么服务器给客户端传输文件
            download_file(client_fd,file_msg.buf);
        }else if(strcmp(cur_msg.buf,"upload") == 0){
            //说明客户端向服务器传送文件，那么服务器接收即可
            upload_file(client_fd,file_msg.buf);
        }
    }
    return 0;
}